﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAL.Interfejsi;
using MySql.Data.MySqlClient;
using OOAD_PROJEKAT;

namespace DAL
{
    partial class DAL
    {
        public class FilijalaDAO : IDaoCrud<Filijala>
        {

            protected MySqlCommand c;

            public long create(Filijala f)
            {
                try
                {

                    c = new MySqlCommand();
                    c.CommandText = "insert into filijale values (@idFilijale, @lokacija, @brojPolica, @brojIskoristenihPolica, @brojZatrazenihPolica)";
                    c.Parameters.AddWithValue("@idFilijale", "");
                    c.Parameters.AddWithValue("@lokacija", f.Lokacija);
                    c.Parameters.AddWithValue("@brojPolica", f.BrojPolica);
                    c.Parameters.AddWithValue("@brojIskoristenihPolica", f.BrojIskoristenihPolica);
                    c.Parameters.AddWithValue("@brojZatrazenihPolica", f.BrojZatrazenihPolica);

                    c.Connection = con;
                    c.ExecuteNonQuery();

                    return c.LastInsertedId;
                }
                catch (Exception e)
                {
                    throw e;
                }
            }

            public List<Filijala> getAll()
            {
                try
                {
                    c = new MySqlCommand("select * from filijale", con);
                    MySqlDataReader r = c.ExecuteReader();
                    List<Filijala> filijale = new List<Filijala>();
                    while (r.Read())
                        filijale.Add(new Filijala(r.GetInt32("idFilijale"), r.GetString("lokacija"), r.GetInt32("brojPolica"),
                                   r.GetInt32("brojZatrazenihPolica"), r.GetInt32("brojIskoristenihPolica")));

                    r.Close();
                    return filijale;
                }
                catch (Exception e)
                {
                    throw e;
                }
            }


            public Filijala read(Filijala f)
            {
                try
                {
                    string commandStr = "select * from filijale where idFilijale=" + f.Id;
                    c = new MySqlCommand(commandStr, con);
                    MySqlDataReader r = c.ExecuteReader();
                    Filijala pr = null;
                    if (r.Read())
                        pr = new Filijala(r.GetInt32("idFilijale"), r.GetString("lokacija"), r.GetInt32("brojPolica"),
                                   r.GetInt32("brojZatrazenihPolica"), r.GetInt32("brojIskoristenihPolica"));
                    r.Close();
                    return pr;
                }

                catch (Exception e)
                {
                    throw e;
                }
            }

            public Filijala update(Filijala f)
            {
                try
                {
                    String commandStr = "update filijale set lokacija = ?a, ";
                    commandStr += "brojPolica= ?b, brojIskoristenihPolica = ?c, ";
                    commandStr += "brojZatrazenihPolica = ?d ";
                    commandStr += "where idFilijale=" + f.Id;

                    c = new MySqlCommand(commandStr, con);
                    c.Parameters.AddWithValue("?a", f.Lokacija);
                    c.Parameters.AddWithValue("?b", f.BrojPolica);
                    c.Parameters.AddWithValue("?c", f.BrojIskoristenihPolica);
                    c.Parameters.AddWithValue("?d", f.BrojZatrazenihPolica);

                    c.ExecuteNonQuery();
                    return read(f);
                }
                catch (Exception e)
                {
                    throw e;
                }
            }

            public void delete(Filijala f)
            {
                //Ukoliko se ukaze potreba za brisanjem filijale, onda prije brisanja koje ce se obaviti ovdje,
                //treba "preuzeti"  ili izbrisati sve zaposlenike sa id-om ove filijale
                throw new NotImplementedException();
                /*try
                {
                    string commandStr = "delete from filijale where idFilijale=" + f.Id;
                    
                    c = new MySqlCommand(commandStr, con);
                    c.ExecuteNonQuery();
                }
                catch (Exception e)
                {
                    throw e;
                }*/

            }

            public Filijala getById(int id)
            {
                try
                {
                    Filijala f = new Filijala(id, "", 0, 0, 0);
                    return read(f);
                }
                catch (Exception e)
                {
                    throw e;
                }
            }

            public List<Filijala> getByExample(string name, string value)
            {
                try
                {
                    c = new MySqlCommand("select * from filijale where " + name + "= '" + value + "'", con);
                    MySqlDataReader r = c.ExecuteReader();
                    List<Filijala> filijale = new List<Filijala>();
                    while (r.Read())
                        filijale.Add(new Filijala(r.GetInt32("idFilijale"), r.GetString("lokacija"), r.GetInt32("brojPolica"),
                                   r.GetInt32("brojZatrazenihPolica"), r.GetInt32("brojIskoristenihPolica")));

                    r.Close();
                    return filijale;
                }
                catch (Exception e)
                {
                    throw e;
                }
            }

        }
    }
}